﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SDT.Model;
using SDT.Lib.Common;
using SDT.Lib.Paging;
using SDT.Admin.ViewModels;
using System.Web.Security;
using SDT.Lib.Helpers;

namespace SDT.Admin.Controllers
{
	[RoleHelper(Roles = RoleSystem.Dictionary)]
    public class ConvertAreaController : Controller
    {
        //
        // GET: /ConvertArea/
		ChoVietDataContext eDataContext = new ChoVietDataContext();
        public ActionResult Index(int ?page)
        {
			try
			{
					if (!page.HasValue) page = 1;
					string keyword = UserState.getUserStateFromRequest("convertArea.Keyword", "Keyword", "").ToString();
					int pageSize = int.Parse(UserState.getUserStateFromRequest("convertArea.pageSize", "PageSize", 20).ToString());
					int TypeProductID = Convert.ToInt32(UserState.getUserStateFromRequest("convertArea.TypeID", "TypeID", 0));
					var Product_Type = eDataContext.ProductTypes.ToList();
					var Areas = eDataContext.ConvertAreas
					   .Where(a => (TypeProductID > 0 ? a.TypeID == TypeProductID : true))
					   .Where(a => (string.IsNullOrEmpty(keyword) ? true :
									(a.ID.ToString().ToLower().Contains(keyword.ToLower().Trim())
									))).ToPagedList(page.Value - 1, pageSize);

					return View(new ConvertAreaViewModels
					{
						ListArea = Areas,
						Keyword = keyword,
						ProductTypes = Product_Type,
						CurrentTypeProduct = TypeProductID
					});
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		#region Create
		public ActionResult Create()
		{
			var ListType = eDataContext.ProductTypes.ToList();
			return View(new CreateConvertAreate { ProductTypes = ListType });
		}
		[ValidateInput(false)]
		[HttpPost]
		public ActionResult Create(CreateConvertAreate ca)
		{
			try
			{
				UpdateModel(ca);
				var CurrentConvertArea = new ConvertArea();
				CurrentConvertArea.AddBy = UserManager.GetUserId();
				CurrentConvertArea.AddDate = DateTime.Now;
				CurrentConvertArea.TypeID = ca.CurrenTypeID;
				if (ca.Min > 0 && ca.Max > 0 && ca.Min > ca.Max)
				{

					ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
					return View();
				}
				if (ca.Min < 0 || ca.Max < 0)
				{
					ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
					return View();
				}
				CurrentConvertArea.MaxValue = ca.Max;
				CurrentConvertArea.MinValue = ca.Min;
				CurrentConvertArea.Name = ca.NameArea;
				eDataContext.ConvertAreas.InsertOnSubmit(CurrentConvertArea);
				eDataContext.SubmitChanges();
				return RedirectToAction("Index");
			}
			catch (Exception ex)
			{
				ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
				return View();
			}
		}
		#endregion

		#region Edit
		public ActionResult Edit(int id)
		{
			try
			{
				if (id < 0) throw new NotSupportedException();
				var ConvertAreaCurrent = eDataContext.ConvertAreas.Where(ca => ca.ID == id).SingleOrDefault();
				var ListType = eDataContext.ProductTypes.ToList();
				return View(new CreateConvertAreate
				{
					CurrentConvertArea = ConvertAreaCurrent,
					Max = (int)ConvertAreaCurrent.MaxValue,
					Min = (int)ConvertAreaCurrent.MinValue,
					ProductTypes = ListType,
					CurrenTypeID = ConvertAreaCurrent.TypeID,
					NameArea =ConvertAreaCurrent.Name
				});
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		[HttpPost]
		public ActionResult Edit(int id, CreateConvertAreate ca)
		{
			try
			{
				if(id<0)throw new NotSupportedException();
				UpdateModel(ca);
				ca.CurrentConvertArea = eDataContext.ConvertAreas.Where(c => c.ID == id).SingleOrDefault();
				ca.CurrentConvertArea.TypeID = ca.CurrenTypeID;
				if (ca.Min > 0 && ca.Max > 0 && ca.Min > ca.Max)
				{

					ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
					return View();
				}
				if (ca.Min < 0 || ca.Max < 0)
				{
					ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
					return View();
				}
				ca.CurrentConvertArea.MinValue = ca.Min;
				ca.CurrentConvertArea.MaxValue = ca.Max;
				ca.CurrentConvertArea.Name = ca.NameArea;
				eDataContext.SubmitChanges();
				return RedirectToAction("Index");
			}
			catch (Exception ex)
			{
				ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
				return View();
			}
		}
		#endregion

		#region Delete
		public ActionResult Delete(int id)
		{
			try
			{
					if (id < 0) throw new NotSupportedException();
					var CurrentConvertArea = eDataContext.ConvertAreas.Where(ca => ca.ID == id).SingleOrDefault();
					return View(CurrentConvertArea);
			}
			catch (Exception ex)
			{
				ViewData["MessageInfo"] = "Có lỗi xảy ra bạn không thể xóa được";
				return View();
			}
		}
		[HttpPost]
		public ActionResult Delete(int id, FormCollection frm)
		{
			try
			{
				if (id < 0) throw new NotSupportedException();
				var CurrentConvertArea = eDataContext.ConvertAreas.Where(ca => ca.ID == id).SingleOrDefault();
				eDataContext.ConvertAreas.DeleteOnSubmit(CurrentConvertArea);
				eDataContext.SubmitChanges();
				return RedirectToAction("Index");
			}
			catch (Exception ex)
			{
				ViewData["MessageInfo"] = "Có lỗi xảy ra bạn không thể xóa được";
				return View();
			}

		}
		#endregion

		#region Detail
		public ActionResult Detatil(int id)
		{
			try
			{
				if (id < 0) throw new NotSupportedException();
				var ConvertAreaCurrent = eDataContext.ConvertAreas.Where(ca => ca.ID == id).SingleOrDefault();
				var ListType = eDataContext.ProductTypes.ToList();
				return View(new CreateConvertAreate
				{
					CurrentConvertArea = ConvertAreaCurrent,
					Max = (int)ConvertAreaCurrent.MaxValue,
					Min = (int)ConvertAreaCurrent.MinValue
				});
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion
	}

	public static class ExtentionNameConvertArea
	{
		public static ProductType NameProductType(this ConvertArea ca)
		{
			ChoVietDataContext eDataContext = new ChoVietDataContext();
			try
			{
				if(ca.TypeID <0)throw new NotSupportedException();
				return eDataContext.ProductTypes.Where(p => p.ID == ca.TypeID).FirstOrDefault();
			}
			catch(Exception)
			{throw;}
			finally
			{
				eDataContext.Dispose();
			}
		}
		public static MembershipUser NameUserAddBy(this ConvertArea ca)
		{
			try
			{
				if (string.IsNullOrEmpty(ca.AddBy.ToString())) throw new NotSupportedException();
				return UserManager.GetUser(ca.AddBy, true);
			}
			catch (Exception)
			{ throw; }
			
		}
	}
}
